export enum SymbolFlags {
    None = 0,
    FunctionScopedVariable = 1 << 0,
    BlockScopedVariable = 1 << 1,
    Property = 1 << 2,
    EnumMember = 1 << 3,
    Function = 1 << 4,
    Class = 1 << 5,
    Interface = 1 << 6,
    ConstEnum = 1 << 7,
    RegularEnum = 1 << 8,
    ValueModule = 1 << 9,
    NamespaceModule = 1 << 10,
    TypeLiteral = 1 << 11,
    ObjectLiteral = 1 << 12,
    Method = 1 << 13,
    Constructor = 1 << 14,
    GetAccessor = 1 << 15,
    SetAccessor = 1 << 16,
    Signature = 1 << 17,
    TypeParameter = 1 << 18,
    TypeAlias = 1 << 19,
    ExportValue = 1 << 20,
    Alias = 1 << 21,
    Prototype = 1 << 22,
    ExportStar = 1 << 23,
    Optional = 1 << 24,
    Transient = 1 << 25,
    Assignment = 1 << 26,
    ModuleExports = 1 << 27,
    ConstEnumOnlyModule = 1 << 28,
    ReplaceableByMethod = 1 << 29,
    GlobalLookup = 1 << 30,
    All = 1 << 30 - 1,

    Enum = RegularEnum | ConstEnum,
    Variable = FunctionScopedVariable | BlockScopedVariable,
    Value = Variable | Property | EnumMember | ObjectLiteral | Function | Class | Enum | ValueModule | Method | GetAccessor | SetAccessor,
    Type = Class | Interface | Enum | EnumMember | TypeLiteral | TypeParameter | TypeAlias,
    Namespace = ValueModule | NamespaceModule | Enum,
    Module = ValueModule | NamespaceModule,
    Accessor = GetAccessor | SetAccessor,

    FunctionScopedVariableExcludes = Value & ~FunctionScopedVariable,

    BlockScopedVariableExcludes = Value,

    ParameterExcludes = Value,
    PropertyExcludes = Value & ~Property,
    EnumMemberExcludes = Value | Type,
    FunctionExcludes = Value & ~(Function | ValueModule | Class),
    ClassExcludes = (Value | Type) & ~(ValueModule | Interface | Function),
    InterfaceExcludes = Type & ~(Interface | Class),
    RegularEnumExcludes = (Value | Type) & ~(RegularEnum | ValueModule),
    ConstEnumExcludes = (Value | Type) & ~ConstEnum,
    ValueModuleExcludes = Value & ~(Function | Class | RegularEnum | ValueModule),
    NamespaceModuleExcludes = None,
    MethodExcludes = Value & ~Method,
    GetAccessorExcludes = Value & ~SetAccessor,
    SetAccessorExcludes = Value & ~GetAccessor,
    AccessorExcludes = Value & ~Accessor,
    TypeParameterExcludes = Type & ~TypeParameter,
    TypeAliasExcludes = Type,
    AliasExcludes = Alias,
    ModuleMember = Variable | Function | Class | Interface | Enum | Module | TypeAlias | Alias,
    ExportHasLocal = Function | Class | Enum | ValueModule,
    BlockScoped = BlockScopedVariable | Class | Enum,
    PropertyOrAccessor = Property | Accessor,
    ClassMember = Method | Accessor | Property,
    ExportSupportsDefaultModifier = Class | Function | Interface,
    ExportDoesNotSupportDefaultModifier = ~ExportSupportsDefaultModifier,

    Classifiable = Class | Enum | TypeAlias | Interface | TypeParameter | Module | Alias,
    LateBindingContainer = Class | Interface | TypeLiteral | ObjectLiteral | Function,
}
